//
//  LBIndexPathSet.h
//  Auction
//
//  Created by Gary on 15/10/17.
//  Copyright © 2015年 Lebo. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface LBIndexPathSet : NSObject {
    NSMutableSet *_set;
}

@property (assign, readonly) NSUInteger count;

+ (instancetype)set;
- (id)objectAtIndexedSubscript:(NSUInteger)index;
- (void)setObject:(id)object atIndexedSubscript:(NSUInteger)index;
- (id)objectForKeyedSubscript:(id)key;
- (void)setObject:(id)object forKeyedSubscript:(id<NSCopying>)key;

- (NSEnumerator *)objectEnumerator;
- (void)addObject:(id)object;
- (void)removeObject:(id)object;

/**
 *   获取所有IndexPath第一位为输入参数的对象
 *
 *  @param index 索引的第一部分
 *
 *  @return Objects
 */
- (NSArray *)frontIndexObjects:(NSUInteger)index;

/**
 *  获取所有IndexPath之前的部分为输入参数的对象, 如参数为(1, 2)，那么(1, 2, 0), (1, 2, 0, 0)...将被返回
 *
 *  @param indexPath 符合要求的索引前面部分
 *
 *  @return Objects
 */
- (NSArray *)frontIndexPathObjects:(NSIndexPath *)indexPath;

/**
 *  获取所有IndexPath长度为length的对象
 *
 *  @param length IndexPath的长度
 *
 *  @return Objects
 */
- (NSArray *)indexObjectsWithLength:(NSUInteger)length;

/**
 *  获取所有IndexPath第一位为输入参数的对象，并且限制了返回数组中Object的IndexPath长度
 *
 *  @param index  符合要求的索引前面部分
 *  @param length 返回的Object的IndexPath的长度
 *
 *  @return Objects
 */
- (NSArray *)frontIndexObjects:(NSUInteger)index length:(NSUInteger)length;

/**
 *  获取所有IndexPath之前的部分，并且限制了返回数组中Object的IndexPath长度
 *  如参数indexPath为(1, 2)，lenght为4，将只返回(1, 2, 0, 0), (1, 2, 0, 1), (1, 2, 1, 5)...
 *
 *  @param indexPath 符合要求的索引前面部分
 *  @param length    返回的Object的IndexPath的长度
 *
 *  @return Objects
 */
- (NSArray *)frontIndexPathObjects:(NSIndexPath *)indexPath length:(NSUInteger)length;

@end
